Fork me on GitHub

【cuckoo沙箱系列2】在虚拟机搭建单节点cuckoo沙箱

因为后续考虑要进行分布式沙箱的搭建,如果全部使用物理机作为cuckoo节点开销比较大(主要是没有地方放那么多主机…),因此后续我又调研了一下在虚拟机安装cuckoo的方法。其实cuckoo分析程序本身就是在命令行以及配置一些文件就ok的,难点主要在于给virtual box里面的虚拟机进行agent配置的时候,没有界面很难操作。因此需要用vnc开启远程桌面。

1. 安装环境准备

pip临时清华源后缀:

-i https://pypi.tuna.tsinghua.edu.cn/simple

安装cuckoo的依赖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sudo apt-get update -y
sudo apt-get upgrade -y
sudo apt-get install python python-pip python-dev libffi-dev libssl-dev -y
sudo apt-get install python-virtualenv python-setuptools -y
sudo apt-get install libjpeg-dev zlib1g-dev swig -y
sudo apt-get install mongodb -y
sudo apt-get install mysql-server -y
sudo apt-get install mysql-client -y
sudo pip install -U cuckoo -i https://pypi.tuna.tsinghua.edu.cn/simple -y
sudo apt-get install apparmor-utils -y
sudo apt-get install libcap2-bin -y
sudo apt-get install yara -y
sudo apt-get install python-yara -y
sudo apt-get install volatility -y
sudo apt-get install python-psycopg2 -y
sudo apt-get install libmysqld-dev -y
sudo apt-get install python-mysqldb -y
sudo apt install lrzsz -y (用来传输文件)

2. 在虚拟的python环境中安装cuckoo

1
2
3
4
5
6
virtualenv venv
. venv/bin/activate
(venv)$ pip install -U pip setuptools -i https://pypi.tuna.tsinghua.edu.cn/simple
(venv)$ pip install -U cuckoo -i https://pypi.tuna.tsinghua.edu.cn/simple
(venv)$ pip install yara-python==3.6.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
(venv)$ pip install mysql-python -i https://pypi.tuna.tsinghua.edu.cn/simple

3. 创建mysql数据库

查看初始密码:

sudo vim /etc/mysql/debian.cnf

mysql -udebian-sys-maint -pFT5P9SLcErDxGHT7

进入数据库之后新建cuckoo的数据库:

1
CREATE DATABASE cuckoo_db;

4. 创建mongo数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
命令行输入:mongo
use cuckoo_db
db.createUser(
{
user: "admin",
pwd: "admin",
roles: [ { role: "readWrite", db: "cuckoo_db" } ]
}
)
然后就成功创建了用户,可以通过db.auth("admin", "admin")验证创建是否成功。
在终端输入下面命令可以成功进入数据库:
mongo --port 27017 -u "admin" -p "admin" --authenticationDatabase "cuckoo_db"

5. 安装virtual box

1
2
sudo apt-get update
sudo apt-get install virtualbox

然后启动virtual box mange,开始创建虚拟机:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
命令行:VBoxManage createvm --name cuckoo_vm1 --register
命令行输出:Settings file: '/home/ics/VirtualBox VMs/cuckoo_vm1/cuckoo_vm1.vbox'
然后就可以通过VBoxManage list vms查看到该机器了:
命令行输出:"cuckoo_vm1" {d06a7037-c094-4918-8ad0-53cc40ea87ba}
基本参数的配置:
VBoxManage modifyvm cuckoo_vm1 --ostype Windows7_64(或者Windows7就是32位)
VBoxManage modifyvm cuckoo_vm1 --memory 2048
VBoxManage createmedium --filename cuckoo_vm1_HDD_SYS_100G.vdi --size 10000
VBoxManage createmedium --filename cuckoo_vm1_HDD_HOME_100G.vdi --size 10000
VBoxManage storagectl cuckoo_vm1 --name IDE --add ide --controller PIIX4 --bootable on
VBoxManage storagectl cuckoo_vm1 --name SATA --add sata --controller IntelAhci --bootable on
关联镜像:
VBoxManage storageattach cuckoo_vm1 --storagectl SATA --port 0 --device 0 --type hdd --medium cuckoo_vm1_HDD_SYS_100G.vdi
VBoxManage storageattach cuckoo_vm1 --storagectl SATA --port 1 --device 0 --type hdd --medium cuckoo_vm1_HDD_HOME_100G.vdi
VBoxManage storageattach cuckoo_vm1 --storagectl IDE --port 0 --device 0 --type dvddrive --medium /home/ics/data/cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso
VBoxManage storageattach cuckoo_vm1 --storagectl IDE --port 1 --device 0 --type dvddrive --medium /home/ics/data/VBoxGuestAdditions_4.1.2.iso(本次没有用到)
查看虚拟机信息:
VBoxManage list runningvms
VBoxManage showvminfo cuckoo_vm1
开启虚拟机:
VBoxManage startvm cuckoo_vm1 --type headless
关闭虚拟机:
VBoxManage controlvm cuckoo_vm1 poweroff
VBoxManage controlvm cuckoo_vm1 savestate

6. vbox开启vnc远程桌面

virtual box配置(命令行):

1
2
3
VBoxManage controlvm cuckoo_vm1 poweroff
VBoxManage modifyvm cuckoo_vm1 --vrdeport 5540 --vrdeaddress "" VBoxManage modifyvm cuckoo_vm1 --vrde on
VBoxManage startvm cuckoo_vm1 --type headless

以上命令的作用是开启vbox中安装好的虚拟机的远程桌面,然后在vnc client连接192.168.1.14:5440(上面的命令行配置的),就可以看到界面进行操作了。

7. virtual box配置host only模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
命令行:VBoxManage hostonlyif create
返回:Interface 'vboxnet0' was successfully created
VBoxManage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1 --netmask 255.255.255.0
取消dhcp:
VBoxManage dhcpserver modify --netname "HostInterfaceNetworking-vboxnet0" --disable
查看验证已经取消dhcp:
VBoxManage list dhcpservers
命令行设置host only模式
VBoxManage modifyvm cuckoo_vm1 --nic2 hostonly --nictype2 82545EM --cableconnected2 on --hostonlyadapter2 vboxnet0
---------------------------------------------------------------------
以上部分设置好了之后主机可以ping到虚拟机,虚拟机可以ping到主机,虚拟机不能上外网。
---------------------------------------------------------------------
然后在本机配置一下iptable的转发:
sudo -i
sysctl -w net.ipv4.ip_forward=1
echo 1 > /proc/sys/net/ipv4/ip_forward
sudo vi /etc/sysctl.conf
去掉net.ipv4.ip_forward=1 前的#号,保存
sysctl -p /etc/sysctl.conf
sudo iptables -P FORWARD ACCEPT
iptables -A FORWARD -o ens32 -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE
sudo vi /etc/network/interfaces
#在最后添加两行
pre-up iptables-restore < /etc/iptables.rules
post-down iptables-save > /etc/iptables.rules
查看配置
sudo iptables -L -n

开启转发功能之后虚拟机可以连接外网了,但是本机可能就baidu都上不了。这时候需要修改一下vi /etc/resolv.conf,改为144.144.144.144

8. win7客户端运行agent配置

agent.py运行环境准备

安装python2.7和PIL

将CWD/agent/agent.py文件拷贝到客户机里。我们需要这个文件能开机自启动,做法如下: 把agent.py文件放到系统开机启动目录中,在Win7中默认的路径是C:\Users[username]\AppData\Roaming\MicroSoft\Windows\Start Menu\Programs\Startup\。

将后缀名改为pyw,管理员身份运行。在任务管理器中查看进程,或在命令行中执行netstat -an查看是否有8000端口的监听,来确定agent是否在运行。

配置虚拟机用户名密码:Administrator 1234

管理员身份运行cmd:

1
2
3
4
5
6
7
8
9
10
11
12
reg add "hklm\software\Microsoft\Windows NT\CurrentVersion\WinLogon" /v DefaultUserName /d Administrator /t REG_SZ /f
reg add "hklm\software\Microsoft\Windows NT\CurrentVersion\WinLogon" /v DefaultPassword /d 1234 /t REG_SZ /f
reg add "hklm\software\Microsoft\Windows NT\CurrentVersion\WinLogon" /v AutoAdminLogon /d 1 /t REG_SZ /f
reg add "hklm\system\CurrentControlSet\Control\TerminalServer" /v AllowRemoteRPC /d 0x01 /t REG_DWORD /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v LocalAccountTokenFilterPolicy /d 0x01 /t REG_DWORD /f
reg add "hklm\software\Microsoft\Windows NT\CurrentVersion\WinLogon" /v DefaultUserName /d cuckoo1 /t REG_SZ /f
reg add "hklm\software\Microsoft\Windows NT\CurrentVersion\WinLogon" /v DefaultPassword /d 1234 /t REG_SZ /f
reg add "hklm\software\Microsoft\Windows NT\CurrentVersion\WinLogon" /v AutoAdminLogon /d 1 /t REG_SZ /f
reg add "hklm\system\CurrentControlSet\Control\TerminalServer" /v AllowRemoteRPC /d 0x01 /t REG_DWORD /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v LocalAccountTokenFilterPolicy /d 0x01 /t REG_DWORD /f

在本机测试是否运行了agent:

curl 192.168.56.100:8000

运行后保存当前状态的快照:

1
VBoxManage snapshot cuckoo_vm1 take cuckoo_vm1_init

9. cuckoo配置文件修改

需要按照自己配置的数据库、IP等修改。

cuckoo.conf

1
2
3
4
5
6
[database部分]
connection = mysql://debian-sys-maint:FT5P9SLcErDxGHT7@localhost:3306/cuckoo_db
[cuckoo]
version_check = no
machinery = virtualbox
process_results = yes

virtualbox.conf

1
2
3
4
5
6
7
8
9
10
11
12
[virtualbox]
mode = headless
path = /usr/bin/vboxmanage
interface = vboxnet0
machines = cuckoo1 //你的虚拟机名称
controlports = 5000-5050
[windows7]
label = cuckoo1 //你的虚拟机名称,需要与machines一致
platform = windows
ip = 192.168.56.101
snapshot = snapshot1 //创建的快照名称

reporting.conf

1
2
3
4
5
6
7
[mongodb]
enabled = yes //默认是no
host = 127.0.0.1
port = 27017
db = cuckoo //数据集名称
store_memdump = yes
paginate = 100

10. cuckoo提交样本运行

首先运行以下指令,解决tcpdump的权限被拒绝:

sudo aa-disable /usr/sbin/tcpdump

启动虚拟python环境:

. venv/bin/activate

开启分析后台:

cuckoo -d

开启web展示页面:

cuckoo web –host 0.0.0.0

-------------本文结束感谢您的阅读-------------